/* 
	登录和注册模块
 */


/* ------------------------------------------------------------------------------------
	模块导入
------------------------------------------------------------------------------------ */
// 第三方模块 - express
const express = require('express')
// 第三方模块 - jwtoken
const jwtoken = require('jsonwebtoken')
// 第三方模块 - moment
const moment = require('moment')

/* ------------------------------------------------------------------------------------
	常量、变量、方法
------------------------------------------------------------------------------------ */
// 新建路由
const loginRouter = express.Router()
// 方法 - 生成 token 
function token(id) {
	return jwtoken.sign({
		id
	}, 'token', {
		expiresIn: 60 * 60
	})
}

// 全局变量
let username, password, user

/* ------------------------------------------------------------------------------------
	路由配置
------------------------------------------------------------------------------------ */

// 通配中间件
loginRouter.use(async (req, res, next) => {
	// 获取请求参数
	({
		username,
		password
	} = req.body)
	console.log(this)
	// 安全判断
	if (!username || !password) return res.sendResult(null, 400, '账号密码不能为空')

	// 检查用户名是否存在
	console.log('检查用户名是否存在')
	user = await res.execSql(`SELECT * FROM user WHERE username = '${username}'`)

	// 往后执行
	next()
})

/* ------------------------------------------------------------------------------------
	POST
------------------------------------------------------------------------------------ */

// 登录请求
loginRouter.post('/', async (req, res) => {
	console.log('登录请求...')

	// 用户不存在，不能登陆
	if (user.length <= 0) return res.sendResult(null, 403, '用户不存在')

	// 密码错误，不能登陆
	if (user[0].password !== password) return res.sendResult(null, 401, '密码错误')

	// 登陆成功
	res.sendResult({
		token: token(user[0].user_id),
		userId: user[0].user_id
	}, 200, '登陆成功')
})

// 注册请求 / 新增用户
loginRouter.post('/register', async (req, res) => {
	console.log('注册请求...')

	// 用户名或密码错误
	if (user.length > 0) return res.sendResult(null, 405, '该手机号已被注册')

	// 获取注册时间
	const create_time = moment(new Date().getTime()).format('YYYY-MM-DD hh:mm:ss')

	const { insertId } = await res.execSql(
		`INSERT INTO user(username, password, user_tel, create_time, update_time) VALUES('${username}', '${password}', '${username}','${create_time}','${create_time}')`
	)
	res.sendResult({ userId: insertId }, 200, `注册成功，登录账号：${username}`)
	/* 返回数据格式
		 OkPacket {
			 fieldCount: 0,
			 affectedRows: 1,
			 insertId: 12,
			 serverStatus: 2,
			 warningCount: 0,
			 message: '',
			 protocol41: true,
			 changedRows: 0
		 }
	 */
	// insertID插入的记录id
})

/* ------------------------------------------------------------------------------------
	导出路由
------------------------------------------------------------------------------------ */
module.exports = loginRouter
